#define _CRT_SECURE_NO_WARNINGS 1

#include<iostream>
using namespace std;

namespace xlh
{
	class string
	{
	public:

		string(const char* str = "")
			:_str(nullptr)
		{
			_str = new char[strlen(str) + 1];
			strcpy(_str, str);
		}

		void swap(string& str)
		{
			std::swap(_str, str._str);
		}

		string(const string& s)
			:_str(nullptr)
		{
			string tmp(s._str);
			swap(tmp);
		}

		string& operator=(const string& s)
		{
			string tmp(s);
			swap(tmp);
			return *this;
		}

		~string()
		{
			delete[] _str;
			_str = nullptr;
		}

	//private:
		char* _str;
	};
}

int main()
{
	xlh::string v("hello world xxxxxxxxxx");
	xlh::string v1(v);
	xlh::string v2("nihao");
	v1 = v2;
	cout << v._str << endl;
	cout << v1._str << endl;
	cout << v._str << endl;
	cout << v2._str << endl;

	return 0;
}